Distributed software accounts for a large percentage of software programs produced today. Distributed software is typically implemented as multiple components interacting in a single computer system or in multiple computer systems interconnected by networks both large and small. Rigorous testing is often required in order to produce a robust, high-quality, and reliable distributed software system. However, testing of such distributed software systems remains difficult because the interaction of components with other components throughout the system or over multiple systems is often highly complex. The complexity is due, in large part, to the difficulty in determining if erroneous code lies within the components, within the other components, or within the interactions between the components, especially when the component interacts with a relatively large number of other components.
Conventionally, each component of the distributed software is individually tested to validate the internal logic of each component, in an effort to produce error-free code for each component. In addition, system integration testing is performed to focus on testing of component interactions only when it is determined that each component contains error-free code. This type of testing, however, is difficult and time consuming. It would therefore be desirable to have a testing system that does not suffer from the drawbacks and difficulties associated with conventional testing schemes.